<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>第三章 内存管理 | Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="第三章 内存管理程序执行过程引入目的 更好的支持多道程序并发执行，提高系统性能编译、链接、装入 编译：由编译程序将用户源代码编译成若干目标模块。 链接：由链接程序将编译后形成的一-组目标模块及所需的库函数链接在一起，形成一个完整的装入模块。 静态链接：在程序运行之前链接 装入时动态链接：再装入内存时候，采用 运行时动态链接：在程序执行中需要该目标模块时，才对他进行的链接   装入：由装入程序将装入">
<meta property="og:type" content="article">
<meta property="og:title" content="第三章 内存管理">
<meta property="og:url" content="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="第三章 内存管理程序执行过程引入目的 更好的支持多道程序并发执行，提高系统性能编译、链接、装入 编译：由编译程序将用户源代码编译成若干目标模块。 链接：由链接程序将编译后形成的一-组目标模块及所需的库函数链接在一起，形成一个完整的装入模块。 静态链接：在程序运行之前链接 装入时动态链接：再装入内存时候，采用 运行时动态链接：在程序执行中需要该目标模块时，才对他进行的链接   装入：由装入程序将装入">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2021-12-19T01:24:30.000Z">
<meta property="article:modified_time" content="2022-01-02T15:38:16.768Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/notes-on-computer-expertise/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/notes-on-computer-expertise/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/notes-on-computer-expertise/css/style.css">

  
    
<link rel="stylesheet" href="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/notes-on-computer-expertise/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/">Home</a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/notes-on-computer-expertise/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://goofyer.gitee.io/notes-on-computer-expertise"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main"><article id="post-操作系统/第三章 内存管理" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:24:30.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="p-name article-title" itemprop="headline name">
      第三章 内存管理
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h1 id="第三章-内存管理"><a href="#第三章-内存管理" class="headerlink" title="第三章 内存管理"></a>第三章 内存管理</h1><h2 id="程序执行过程"><a href="#程序执行过程" class="headerlink" title="程序执行过程"></a>程序执行过程</h2><h3 id="引入目的"><a href="#引入目的" class="headerlink" title="引入目的"></a>引入目的</h3><ul>
<li>更好的支持多道程序并发执行，提高系统性能<h3 id="编译、链接、装入"><a href="#编译、链接、装入" class="headerlink" title="编译、链接、装入"></a>编译、链接、装入</h3></li>
<li>编译：由编译程序将用户源代码编译成若干目标模块。</li>
<li>链接：由链接程序将编译后形成的一-组目标模块及所需的库函数链接在一起，形成一个完整的装入模块。<ul>
<li>静态链接：在程序运行之前链接</li>
<li>装入时动态链接：再装入内存时候，采用</li>
<li>运行时动态链接：在程序执行中需要该目标模块时，才对他进行的链接</li>
</ul>
</li>
<li>装入：由装入程序将装入模块装入内存运行。<ul>
<li>绝对装入：适合单道程序环境</li>
<li>静态重定位：适合装入之后不再移动的情况</li>
<li>动态重定位：适合装入时还会移动的情况<h3 id="逻辑地址和物理地址"><a href="#逻辑地址和物理地址" class="headerlink" title="逻辑地址和物理地址"></a>逻辑地址和物理地址</h3></li>
</ul>
</li>
<li>逻辑地址空间：一个源程序在编译或者链接装配后指令和数据所用的所有相对地址的空间</li>
<li>物理地址空间：内存中物理单元的集合<h3 id="内存保护"><a href="#内存保护" class="headerlink" title="内存保护"></a>内存保护</h3></li>
<li>1)在CPU中设置一对上、下限寄存器，存放用户作业在主存中的下限和上限地址，每当cpu要访问一个地址时，分别和两个寄存器的值相比，判断有无越界。</li>
<li>2)采用重定位寄存器(或基址寄存器)和界地址寄存器(又称限长寄存器)来实现这种保护。重定位寄存器含最小的物理地址值，界地址寄存器含逻辑地址的最大值。每个逻辑地址值必须小于界地址寄存器;内存管理机构动态地将逻辑地址与界地址寄存器进行比较较，若未发生地址越界，则加上重定位寄存器的值后映射成物理地址，再送交内存单元<h2 id="扩充内存"><a href="#扩充内存" class="headerlink" title="扩充内存"></a>扩充内存</h2><h3 id="覆盖与变换"><a href="#覆盖与变换" class="headerlink" title="覆盖与变换"></a>覆盖与变换</h3><h2 id="连续分配"><a href="#连续分配" class="headerlink" title="连续分配"></a>连续分配</h2><h3 id="单一连续分配"><a href="#单一连续分配" class="headerlink" title="单一连续分配"></a>单一连续分配</h3><h3 id="固定分区分配-可能出现内部碎块"><a href="#固定分区分配-可能出现内部碎块" class="headerlink" title="固定分区分配(可能出现内部碎块)"></a>固定分区分配(可能出现内部碎块)</h3><h3 id="动态分区分配"><a href="#动态分区分配" class="headerlink" title="动态分区分配"></a>动态分区分配</h3><h4 id="外部碎片"><a href="#外部碎片" class="headerlink" title="外部碎片"></a>外部碎片</h4><h4 id="分配算法：首次-最佳-最坏-临近适应"><a href="#分配算法：首次-最佳-最坏-临近适应" class="headerlink" title="分配算法：首次 最佳 最坏 临近适应"></a>分配算法：首次 最佳 最坏 临近适应</h4><h2 id="非连续分配"><a href="#非连续分配" class="headerlink" title="非连续分配"></a>非连续分配</h2><h3 id="页式存储管理"><a href="#页式存储管理" class="headerlink" title="页式存储管理"></a>页式存储管理</h3><h4 id="概念：页面、地址结构、页表"><a href="#概念：页面、地址结构、页表" class="headerlink" title="概念：页面、地址结构、页表"></a>概念：页面、地址结构、页表</h4><h4 id="地址变化机构及变换过程"><a href="#地址变化机构及变换过程" class="headerlink" title="地址变化机构及变换过程"></a>地址变化机构及变换过程</h4><h4 id="快表"><a href="#快表" class="headerlink" title="快表"></a>快表</h4><h3 id="段式存储结构"><a href="#段式存储结构" class="headerlink" title="段式存储结构"></a>段式存储结构</h3><h4 id="段表、地址变换机构、段的共享与保护"><a href="#段表、地址变换机构、段的共享与保护" class="headerlink" title="段表、地址变换机构、段的共享与保护"></a>段表、地址变换机构、段的共享与保护</h4><h3 id="页段式存储结构"><a href="#页段式存储结构" class="headerlink" title="页段式存储结构"></a>页段式存储结构</h3><h4 id="页表-段表"><a href="#页表-段表" class="headerlink" title="页表 段表"></a>页表 段表</h4><h2 id="虚拟内存"><a href="#虚拟内存" class="headerlink" title="虚拟内存"></a>虚拟内存</h2><h3 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h3><h4 id="局部性原理"><a href="#局部性原理" class="headerlink" title="局部性原理"></a>局部性原理</h4><h4 id="特征"><a href="#特征" class="headerlink" title="特征"></a>特征</h4>多次性<br>对换性<br>虚拟性<h3 id="请求分页"><a href="#请求分页" class="headerlink" title="请求分页"></a>请求分页</h3><h4 id="组成：页表结构、缺页中断机构、地址变换机构"><a href="#组成：页表结构、缺页中断机构、地址变换机构" class="headerlink" title="组成：页表结构、缺页中断机构、地址变换机构"></a>组成：页表结构、缺页中断机构、地址变换机构</h4><h4 id="页面置换算法"><a href="#页面置换算法" class="headerlink" title="页面置换算法"></a>页面置换算法</h4><h4 id="页面分配策略"><a href="#页面分配策略" class="headerlink" title="页面分配策略"></a>页面分配策略</h4><h4 id="抖动、工作集"><a href="#抖动、工作集" class="headerlink" title="抖动、工作集"></a>抖动、工作集</h4></li>
</ul>
<h3 id="管理方式"><a href="#管理方式" class="headerlink" title="管理方式"></a>管理方式</h3><ul>
<li><p>连续分配</p>
<ul>
<li>单一连续分配：分配到内存固定区域，单任务系统</li>
<li>固定分区分配：分配到内存中不同的固定区域</li>
<li>动态分区分配<ul>
<li>基本概念：按照程序的需要进行动态的划分</li>
<li>分配算法<ul>
<li>首次适应：按地址从小到大为序，分配第一个符合条件的分区</li>
<li>最佳适应：按空间从小到大为序，分配第一个符合条件的分区</li>
<li>最坏适应：按空间从大到小为序，分配第一个符合条件的分区</li>
<li>临近适应：与首次适应相似，从上次查完的结束位置开始查找</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>非连续分配<ul>
<li>基本分页：内存分为固定块，按物理结构划分，会有内部碎片</li>
<li>基本分段：内存块的大小不固定，按逻辑结构划分，会有外部碎片</li>
<li>段页式：基本分段和基本分页的结合，会有内部碎片</li>
</ul>
</li>
<li><p>内存扩充</p>
<ul>
<li>覆盖：预算设定覆盖段，覆盖掉暂时不需要的内容，通常在一个程序中继续</li>
<li>交换：吧处于等待的程序暂时移到外存，通常在不同程序键进行</li>
<li><p>虚拟内存</p>
<ul>
<li>引入：逻辑上扩充内存</li>
<li><p>组成部分</p>
<ul>
<li>页表机制：通过查表获取相关信息</li>
<li>中断机制：要访问也不在内存时产生缺页中断</li>
<li>地址变换机构：把逻辑地址变换成物理地址</li>
<li>内存与外存：需要一定容量的内存与外存的支持</li>
</ul>
</li>
<li><p>置换算法</p>
<ul>
<li>OPT：选择以后不用的页面</li>
<li>FIFO：选择最先装入的页面</li>
<li>LRU：选择最近最久未使用的页面</li>
<li>CLOCK：选择最近未用的页面</li>
<li>改进型clock：考虑页面修改问题</li>
</ul>
</li>
<li><p>地址翻译：TLB-&gt;页表&gt;cache&gt;主存&gt;外存</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/" data-id="cl403sxrs002qf8vu0gfl1awt" data-title="第三章 内存管理" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          第一章 系统概述
        
      </div>
    </a>
  
  
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">第二章 进程管理</div>
    </a>
  
</nav>

  
</article>


</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C#工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C++工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/Mysql/">Mysql</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/blender/">blender</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/manim/">manim</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/spring/">spring</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C/">vba基础操作</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/">创造模式</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">操作系统</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/">操作系统开发</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">数据结构基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%A8%A1%E6%9D%BF/">模板</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/">深度学习</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%8B%B1%E8%AF%AD/">英语</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%99%9A%E5%B9%BB4/">虚幻4</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/">计算机组成原理</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/notes-on-computer-expertise/tags/C/" rel="tag">C++</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/notes-on-computer-expertise/tags/C/" style="font-size: 10px;">C++</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/05/">May 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/03/">March 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/02/">February 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/01/">January 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2021/12/">December 2021</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/31/vue/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E9%AA%8C%E8%AF%81%E7%A0%81%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/26/%E6%95%B0%E6%8D%AE%E5%BA%93/navicat%E5%AE%89%E8%A3%85/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/25/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E8%99%9A%E5%B9%BB%E5%9B%9B%20mod%E5%88%B6%E4%BD%9C/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/python/python%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0/EXCEL%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/">(no title)</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2022 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/notes-on-computer-expertise/" class="mobile-nav-link">Home</a>
  
    <a href="/notes-on-computer-expertise/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/notes-on-computer-expertise/js/jquery-3.4.1.min.js"></script>



  
<script src="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.js"></script>




<script src="/notes-on-computer-expertise/js/script.js"></script>





  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>